package com.cmcc.sdtp.client;

import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.cmcc.sdtp.sdtp.util.MessageUtil;

/**
 * @className：XDR数据反查请求
 * @author B
 * @date:
 * @version : 1.0
 */
public class XDRRawDataQuery {
	
	private static Logger logger = LogManager.getLogger(XDRRawDataQuery.class);
	public static final int XDRRawDataQuery_Req = 0x0008;// XDR数据反查请求
	public static final int XDRRawDataQuery_Resp = 0x8008;// XDR数据反查应答
	public static final int[] XDRRawDataQuery = { 1, 16, 8 };

	public static byte[] XDRRawDataQuery_Req() {
		logger.info("数据发送请求封装");
		List<byte[]> list = new ArrayList<byte[]>();
		// 获取信息头
		list.add(Messagedispose.createMessageHeader(XDRRawDataQuery_Req));
		// 接口类型：
		// 1. Uu
		// 2. X2
		// 3. UE_MR
		// 4. Cell_MR
		// 5. S1-MME
		// 6. S6a
		// 7. S11
		// 8. S10
		// 9. SGs
		// 10. S5/S8
		// 11. S1-U
		// 12. Gn-C
		int Interface = 23;// 字节数1
		// 单接口XDR的XDR ID
		byte[] strBytes = MessageUtil.toByteArrayFromHex("fe8a4906000553c84400040bd9010001", 16);
		// 第二个字节开始反转一共转8个
		MessageUtil.toBigInteger(strBytes);
		long XDRID = MessageUtil.toBigInteger(strBytes).longValue();
		// XDR中记录的开始时间，定义为距1970年1月1日0时0分0秒的偏移量，单位为秒
		int StartTime = (int) ((new Date()).getTime() / 1000);
		logger.info("XDRID:"+XDRID+",StartTime:"+StartTime);
		list.add(Util.encodeToSendbytes(new String[] { Interface + "" }, new int[] { 1 }));
		list.add(change(strBytes));
		list.add(MessageUtil.toByteArrayFromHex("0000000055d9ee00", 8));
		return Util.bulidByteArr(list);
	}

	public static boolean XDRRawDataQuery_Resp(ByteBuffer buffer) {
		logger.debug("数据反查响应解析");
		// 流在这里那写的什么乱七八糟的玩意
		byte[] result = new byte[1];
		buffer.get(result);
		switch (Util.unbuildNumericWithSpace(result, 1)) {
		case 1:
			logger.debug("反查成功");
			return true;
		default:
			logger.debug("反查失败");
			return false;
		}
	}

	public static byte[] XDRRawDataQuery_Req(int i, String id, long l)  throws Exception{
		logger.info("数据发送请求封装,i="+ i + ",id=" + id + ",l=" + l);
		List<byte[]> list = new ArrayList<byte[]>();
		// 获取信息头
		list.add(Messagedispose.createMessageHeader(XDRRawDataQuery_Req));
		list.add(new byte[] { (byte) i });
		list.add(MessageUtil.toByteArrayFromHex(id, 16));
//		logger.info("====="+Arrays.toString(MessageUtil.toByteArrayFromHex(id, 16)));
//		logger.info("change====="+Arrays.toString(change(MessageUtil.toByteArrayFromHex(id, 16))));
//		list.add(MessageUtil.toByteArrayFromHex(id, 16));
//		list.add(MessageUtil.toByteArrayFromHex("0000000055d9ee00", 8));
		list.add(MessageUtil.toByteArray(l, 8));
		return Util.bulidByteArr(list);
	}

	public static byte[] change(byte[] bytes) {
		byte temp = 0;
		for (int i = 1; i < 5; i++) {
			temp = bytes[i];
			bytes[i] = bytes[9 - i];
			bytes[9 - i] = temp;
		}
		return bytes;
	}
}